using Drill.Extensibility;

namespace Drill.Configuration
{
    /// <summary>
    /// Interface used to access configuration data for the configured dependency resolver instances.
    /// </summary>
    public interface IDrillBitConfiguration
    {
        /// <summary>
        /// Gets the collection of configuration sources for a dependency resolver config item.
        /// </summary>
        /// <value>The collection of configuration sources for a dependency resolver config item.</value>
        IConfigSourceConfigurationCollection ConfigurationSources { get; }

        /// <summary>
		/// Gets a value indicating whether this <see cref="IDrillBitConfiguration"/> is enabled.
        /// </summary>
        /// <value><c>true</c> if enabled; otherwise, <c>false</c>.</value>
        bool Enabled { get; }

        /// <summary>
        /// Gets the name of the dependency resolver.
        /// </summary>
        /// <value>The name of the dependency resolver.</value>
        string Name { get; }

        /// <summary>
        /// Gets the assembly-qualified type name of the concrete type that is configured as a dependency resolver.
        /// The type must implement either the <see cref="IDrillBit"/> or <see cref="IDependencyResolver"/> interface.
        /// </summary>
        /// <value>The assembly-qualified type name of the concrete type that is configured as a dependency resolver.</value>
        string Type { get; }
    }
}